Dynamic coefficient reordering

ABSTRACT

A system, apparatus, and method of compressing video data having at least one frame having at least one block having an array of pixels. The method includes transforming the pixels of the at least one block into coefficients, creating a default transmission order of the coefficients, creating an optimal transmission order of the coefficients, comparing a coefficient position of at least one of the coefficients in the optimal transmission order with a coefficient position of the at least one of the coefficients in the default transmission order; determining an update value based on the comparison, and selectively encoding position information of the at least one of the coefficients in the optimal transmission order based on the update value.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No.10/713,807, filed on Nov. 14, 2003, which claims priority from U.S.Provisional Application No. 60/469,187, filed on May 12, 2003. U.S.patent application Ser. No. 10/713,807 and U.S. Provisional ApplicationNo. 60/469,187 are both incorporated herein by reference in theirentirety.

TECHNICAL FIELD

The invention relates to video data and more specifically to methods andsystems of coding, decoding, compressing, and transmitting video data inas efficient a manner as possible.

BACKGROUND

The transmission of data is usually constrained by bandwidth andthroughput limitations. One cannot send or receive an infinite amount ofinformation in an infinitesimal amount of time. In order to maximize theamount and quality of information being transmitted, in some cases theinformation is compressed or coded for transmission and uncompressed ordecoded upon reception.

One area in which data compression is essential is in the transmissionof video data. Ordinary text, unless voluminous, is easily and quicklytransmitted. However, video data can include aspects of color,brightness, and often stereo audio information. A large amount of datais required to define even short video clips. The transmission andcoding of such data must be as efficient as possible, i.e., it mustrequire as little information as possible to be transmitted.

Video compression is a subset of the general technique of datacompression, whereby a signal is squeezed or compressed into a smallerset of numbers. These numbers will then take up less space on a harddrive, or take less time to transmit over a network. Before the numbersare used again, a decompression algorithm is applied to expand theseries of numbers to its original (or at least a similar) form.

Video compression utilizes the fact that the signal is known tooriginate as digitized video, in order to increase the compressionratio, or the amount of squeezing that can be applied to the series ofnumbers to be stored or transmitted. Significant compression of videoand audio are considered lossy algorithms because they discard or losesome portion of the original information; the reconstructed numberseries does not exactly match the original. This is acceptable becausethe precision with which we view video and audio, compared to theresolution of the digitization process, is not perfect. While the videosignal may become slightly distorted, it is still recognizable. Thedegree to which a compression algorithm faithfully reproduces theoriginal signal with minimum distortion or loss is a measure of thesuccess of the algorithm.

There are a number of good reasons to compress video and audio signals,including technical issues and cost of equipment. one overriding issueis the cost of transmitting data. As the Internet matures into the defacto data transport platform for the 21st century, analog media such asvideotape, film, and broadcast will be supplanted by a digital mediainfrastructure built on the Internet and Internet-related technologies.This digital infrastructure will allow data to be transferred betweenany two computing machines on the planet, if so desired. However, thespeed at which this data can be sent will depend on a number of factors.In the limiting case, copper wires laid down over a century ago andintended for analog voice communications are used with modem technology(modem stands for Modulation/DEModulation) to transmit data at speeds aslow as 9600 bits per second. Similar speeds are used to carry voice overwireless networks such as cellular. Recently, cable modem, DSL, andsatellite technologies have brought six-figure data rates (100,000 to 1million bits/second) to home users. For high-end applications, opticalfiber enables data rates into the gigabit range (billions of bits persecond) and beyond.

Whatever the data rate available for a given application, transmittingdata costs money. At the present time, the cost of sending one megabyte(8 million bits) over the Internet usually costs anywhere from 5 centsat low volume, down to as low as one cent at extremely high volume (thisfigure does not include the cost at the receiving end). Therefore, thecost of transporting a megabyte of data from one place to another isalways more than a penny.

Much work has been done in the field of video data compression. Some ofthe features of video codecs in existence include Discrete CosineTransform compression, entropy coding, and differential coding of motionvectors. Prior codecs also utilize reference frames so that if a datapacket is lost or corrupted, the data can be retrieved by referring to areference frame. All of these features and difficulties therewith willbe discussed in greater detail below.

In DCT (Discrete Cosine Transform) based video compression systems, an 8by 8 block of pixel or prediction error signal data is transformed intoa set of 64 frequency coefficients (a DC value and 63 AC values), whichare then quantized and converted into a set of tokens.

Typically the higher frequency AC coefficients are smaller in magnitudeand hence less likely to be non zero (i.e., more likely to be zero)following quantization. Consequently, prior to tokenization, thecoefficients are often arranged in ascending order starting with thelowest frequency coefficient (the DC value) and finishing with thehighest frequency AC coefficient. This scan order, sometimes referred toas “zig-zag order”, tends to group together the non-zero values at thestart and the zero values into runs at the end and by so doingfacilitates more efficient compression.

However, this fixed scan order is seldom optimal. For example, whenencoding interlaced video material, certain high frequency coefficientsare much more prominent. This fact is reflected in the prior art wherethere are examples of codecs (for example MPEG-2), that mandate analternative scan order for use when coding interlaced video.

When optimizing a codec for a specific hardware device, it is importantto make sure that full use is made of any facilities that the device mayoffer for performing multiple tasks in parallel and to limit the extentto which individual parts of the decode process become bottlenecks.

The instant invention's bitstream, in common with most other videocodecs, can broadly speaking be described as comprising entropy codedtokens that can be divided into two main categories: predictor or Ptokens and prediction error or E tokens. P tokens are tokens describingthe method or mode used to code a block or region of an image and tokensdescribing motion between one frame and another. E tokens are used tocode any residual error that results from an imperfect prediction.

Entropy coding is a process whereby the representation of a specific Por E token in the bitstream is optimized according to the frequency ofthat token in the bitstream or the likelihood that it will occur at aparticular position. For example, a token that occurs very frequentlywill be represented using a smaller number of bits than a token thatoccurs infrequently.

Two of the most common entropy coding techniques are Huffman Coding andarithmetic coding. In Huffman coding each token is represented by avariable length pattern of bits (or a code). Arithmetic coding is a morecomputationally complex technique but it removes the restriction ofusing a whole number of bits for each token. Using an arithmetic coder,it is perfectly possible to code a very common token at an average costof 2% of a bit.

Many multimedia devices have a co-processor unit that is well suited tothe task of entropy coding and a more versatile main processor.Consequently, for the purpose of parallelization, the process ofencoding or decoding a bitstream is often divided into entropy relatedtasks and non entropy related tasks. However, for a given video clip, asthe data rate increases, the number of tokens to encode/decode risessharply and entropy coding may become a bottleneck.

With a conventional bitstream it is very difficult to re-distribute thecomputational load of entropy coding to eliminate this bottleneck. Inparticular, on the decode side, the tokens must normally be decoded oneat a time and in the order in which they were encoded. It is alsoextremely difficult to mix methods or entropy encoding (for exampleHuffman and arithmetic coding) other than at the frame level.

By convention, most modern video codecs code the (x, y) components of amotion vector, using a differential coding scheme. That is, each vectoris coded relative to the previous vector. For example, consider twovectors (7,3) and (8,4). In this case the second vector would be encodedas (1,1), that is (7+1, 3+1).

This scheme works well if most blocks or regions for which a motionvector is coded exhibit motion that is similar to that of theirneighbors. This can often be shown to be the case, for example whenpanning. However, it works less well if the motion field is irregular orwhere there are frequent transitions between background and foregroundregions which have different motion characteristics.

For most modern video codecs, motion prediction is an important part ofthe compression process. Motion prediction is a process whereby themotion of objects or regions of the image is modeled over one or moreframes and one or more ‘motion vectors’ is transmitted in the bitstreamto represent this motion. In most cases it is not possible to perfectlymodel the motion within an image, so it is necessary to code a residualerror signal in addition to the motion information.

In essence, each motion vector points to a region in a previouslyencoded frame that is similar to the region in the current frame that isto be encoded. The residual error signal is obtained by subtracting thepredicted value of each pixel from the actual value in the currentframe.

Many modern video codecs extend the process by providing support forprediction of motion to sub pixel accuracy, e.g, half-pixel orquarter-pixel motion estimation. To create fractional pixel data points,it is necessary to use some form of interpolation function or filterapplied to real (i.e. full pixel aligned) data points.

Early codecs generally used simple bilinear interpolation as shown inFIG. 1 attached hereto. In this example, A, B, C, and D are full-pixelaligned data points and x, y, and z are half-pixel aligned points. Pointx is half-pixel aligned in the X direction and can be calculated usingthe equation:

x=(A+B)/2.  (1)

Point y is half-pixel aligned in the Y direction and can be calculatedusing the equation:

y=(A+C)/2.  (2)

Point z is half-pixel aligned in both X and Y can be calculated usingthe equation:

z=(A+B+C+D)/2.  (3)

Later codecs have tended to move towards the use of more complexinterpolation filters, such as bicubic filters, that are less inclinedto blur the image. In the example shown in FIG. 2, x is a half-pixelpoint that lies half way between two full pixel aligned pointes B and C.Using an integer approximation to a bicubic filter it can be calculatedusing the equation:

x=(−A+9B+9C−D)/16.  (4)

Though filters such as the one illustrated above tend to produce sharperlooking results, their repeated application over several frames can insome situations result in unpleasant artifacts such as false textures orfalse contouring.

When transmitting compressed video data over an unreliable orquestionable data link, it is important that a mechanism exists forrecovering when data is lost or corrupted, as video codecs are oftenextremely sensitive to errors in the bitstream.

Various techniques and protocols exist for the reliable transmission ofdata of such links, and these typically rely upon detection of theerrors and either re-transmission or the use of additional data bitsthat allow certain types of error to be corrected. In many situationsthe existing techniques are adequate, but in the case of videoconferencing over restricted bandwidth links neither of the abovementioned approaches is ideal. Re-transmission of lost data packets maynot be practical because it is likely to cause an increased end to endlag, while the use of error correction bits or packets may not beacceptable in situations where bandwidth is already severely restricted.

An alternative approach is simply to detect the error at the decoder andreport it to the encoder. The encoder can then transmit a recovery frameto the decoder. Note that this approach may not be appropriate if theerror rate on the link is very high, e.g., more than one error in every10-20 frames.

The simplest form of recovery frame is a key frame (or intra onlyframe). This is a frame that does not have any dependencies on previousframes or the data therein. The problem with key frames is that they areusually relatively large.

SUMMARY

Disclosed herein are aspects of systems, methods, and apparatuses forencoding and decoding video signals.

One aspect of the disclosed implementations is a method of compressingvideo data having at least one frame having at least one block having anarray of pixels. The method includes transforming the pixels of the atleast one block into coefficients; creating a default transmission orderof the coefficients; creating an optimal transmission order of thecoefficients; comparing a coefficient position of at least one of thecoefficients in the optimal transmission order with a coefficientposition of the at least one of the coefficients in the defaulttransmission order; determining an update value based on the comparison,the update value indicative of whether the coefficient position of theat least one of the coefficients in the optimal transmission order isthe same as the coefficient position of the at least one of thecoefficients in the default transmission order; and selectively encodingposition information of the at least one of the coefficients in theoptimal transmission order based on the update value.

Another aspect of the disclosed implementations is an apparatus forcompressing video data having at least one frame having at least oneblock having an array of pixels. The apparatus comprises a memory and aprocessor configured to execute instructions stored in the memory to:transform the pixels of the at least one block into coefficients; createa default transmission order of the coefficients; create an optimaltransmission order of the coefficients; compare a coefficient positionof at least one of the coefficients in the optimal transmission orderwith a coefficient position of the at least one of the coefficients inthe default transmission order; determine an update value based on thecomparison, the update value indicative of whether the coefficientposition of the at least one of the coefficients in the optimaltransmission order is the same as the coefficient position of the atleast one of the coefficients in the default transmission order; andselectively encode position information of the at least one of thecoefficients of the optimal transmission order based on the updatevalue.

Another aspect of the disclosed implementations is an apparatus forcompressing video data having at least one frame having at least oneblock having an array of pixels. The apparatus includes means fortransforming the pixels of the at least one block into coefficients;means for creating a default transmission order of the coefficients;means for creating an optimal transmission order of the coefficients;means for comparing a coefficient position of at least one of thecoefficients in the optimal transmission order with a coefficientposition of the at least one of the coefficients in the defaulttransmission order; means for determining an update value based on thecomparison, the update value indicative of whether the coefficientposition of the at least one of the coefficients in the optimaltransmission order is the same as the coefficient position of the atleast one of the coefficients in the default transmission order; andmeans for selectively encoding position information of the at least oneof the coefficients in the optimal transmission order based on theupdate value.

It is an object of the invention to provide a video compression methodand codec that is efficient and reliable.

It is another object of the invention to provide a video compressionmethod and codec that can perform discrete cosine transforms in anadaptive manner.

It is another object of the invention to provide a video compressionmethod and codec that performs entropy coding that optimizes theresources of the hardware devices being employed.

It is another object of the invention to provide a video compressionmethod and codec that enhances motion vector coding.

It is another object of the invention to provide a video compressionmethod and codec that accurately and efficiently performs fractionalpixel motion prediction.

It is another object of the invention to provide a video compressionmethod and codec that performs error recovery efficiently, even in theenvironment of a video conference.

The above and other objects are fulfilled by the invention, which is amethod of compressing video data having at least one frame having atleast one block and each block having an array of pixels. The disclosureincludes at least one of the following steps: I) transforming the pixelsof each block into coefficients and creating an optimal transmissionorder of the coefficients; II) optimizing the speed of processingcompressed video data by partitioning the data bitstream and coding eachpartition independently; III) predicting fractional pixel motion byselecting an interpolation method for each given plurality of pixelsdepending upon at least one metric related to each given block; and IV)enhancing error recovery for a current frame using a frame prior to theframe immediately before the current frame as the only reference framefor lessening quality loss during data transmission.

As for the coefficient reordering aspect of the invention, the methodtransforms the pixels of each block into coefficients, each coefficienthaving a coefficient position and a value and determines a positionvalue related to each coefficient position. An optimal transmissionorder of coefficients is then created based on the position values ofeach coefficient position, and the coefficients are transmitted in theorder so determined. Preferably, the transmission order of coefficientsis dynamically re-ordered for each frame of video data. The transformingstep preferably transforms the pixels into discrete cosine transformcoefficients.

The transmission order of coefficients may be transmitted along with thecoefficients. Preferably, each block has the same number of coefficientsand coefficient positions, and each corresponding respective coefficientposition conveys the same respective information from block to block.

In an effort to reduce the amount of data being transmitted, thetransmission of coefficient order data may be limited to changes in thecoefficient order from one frame to the next frame. Alternatively or inaddition, the transmission order may be consolidated into bands ofcoefficients, each band having a plurality of coefficients organized byrank in numbers determined above. In this case, only band informationmay be transmitted along with the coefficients. Preferably, only bandinformation will be transmitted where a coefficient changes bands fromone frame to the next. As another alternative, all band information mayalways be transmitted.

Reordering the coefficients can also include the provision of a keyframe. The inventive method may provide such a key frame which is alwayscompletely self-encoded and requires no information from or about aprevious frame. In such a case, the encoder determines if a given frameis a key frame. If it is determined that the given frame is a key frame,the entire transmission order of coefficients for the key frame istransmitted. If it is determined that the given frame is not a keyframe, only changes in the transmission order of coefficients from theprevious frame to the given frame are transmitted.

As mentioned above, the invention contemplates optimizing the speed ofprocessing compressed video data by partitioning the data bitstream andcoding each partition independently. Specifically, the invention dividesthe video data into at least two data partitions and selects an optimalentropy coding method for each data partition. The entropy codingmethods thus selected are applied respectively to each data partition.In one embodiment, the video data is divided into a predictor token datapartition and an error token data partition; preferably, each datapartition undergoes a different entropy coding method, such as Huffmancoding and arithmetic coding. The various decoding processes of thedifferent data partitions may be performed asynchronously and/orindependently. This may be accomplished by providing at least twosubprocessors in the hardware, wherein one data partition is decoded byone subprocessor and another data partition is decoded by anothersubprocessor. Determining which entropy coding method is to be used fora given data partition may be based on the size of the given datapartition.

In one embodiment of the method and codec, the predictor token datapartition is read and converted into a predictor block. The error tokendata partition is also read and is converted into coefficients andthence an error block. The predictor block and the error block aresummed to form an image block. As mentioned above, it is preferable toprovide at least two subprocessors, wherein some of these steps areperformed on one subprocessor and the rest of the steps are performed onanother subprocessor. Specifically, the steps of reading the error tokendata partition and converting the error token data partition intocoefficients are preferably performed by a fast entropy optimizedsubprocessor, and the other steps are preferably performed by a generalpurpose subprocessor.

The method optimizes decoder performance of the bitstream in a way thatavoids data and code cache misses. As many distinct functions of thedecoder's code as can fit into the code cache are stored there. The codefrom this step is run for as many blocks as can fit into the data cache.The next set of distinct functions of the decoder's code and thencollected, and the process is repeated until all of the bitstream hasbeen read and each of the blocks of data have been produced.

Another aspect of optimizing decoder performance of the bitstreamoptimizes the utilization of the subprocessors by assigning each subtaskto a separate processor. Preferably, the portion of the decoder thatreads error tokens from the bitstream and translates them intocoefficients is run on a fast entropy optimized subprocessor. Theportion of the decoder that reads the predictor tokens from thebitstream and builds a filtered predictor block from these tokens is runon a subprocessor with fast access to memory. The portion of the decoderthat translates the transform coefficients from the above step into anerror signal is run on a subprocessor that has an optimizedimplementation of the transform coder, and the portion of the decoderthat adds the predictor block to the error signal is run on asubprocessor optimized for motion compensation.

The video data may be divided into two data partitions, a first datapartition representing a first area of the frame and a second datapartition representing a second area of the frame (e.g,. upper and lowerhalves or left and right halves). Alternatively, the video data may bedivided into three data partitions, each respectively representinglevel, saturation, and hue information of the frame. In another version,the three data partitions could respectively represent cyan, magenta,and yellow information of the frame.

As mentioned before, the invention includes the aspect of predictingfractional pixel motion by selecting an interpolation method for eachgiven plurality of pixels depending upon at least one metric related toeach given block. Specifically, the value of the at least one metricassociated with a given plurality of pixels to encode is determined, andan interpolation method of encoding the given plurality of pixels isselected depending upon the value of the at least one metric determined.The interpolation method thus selected is applied to the given pluralityof pixels to encode, and the process is repeated steps for eachsuccessive plurality of pixels. The at least one metric may be at leastone of motion vector length and a complexity factor. The interpolationmethods may include bilinear, bicubic, quadratic, and B-splineinterpolation. The given plurality of pixels may be an entire frame or asub-portion thereof. If the motion vector length associated with thegiven plurality of pixels is determined to be less than thepredetermined length value and the complexity factor associated with thegiven plurality of pixels is determined to be greater than thepredetermined complexity value, then bicubic interpolation is selected.A predetermined length value and the predetermined complexity value ispreferably set one time for a given number of pluralities of pixels, andpossibly once per frame.

The complexity factor is preferably a variance of the given plurality ofpixels, calculated as

C=(n Ex _(i) ²−(Ex _(i))²)/n ²  (4)

As mentioned above, the invention includes enhancing error recovery fora current frame using a frame prior to the frame immediately before thecurrent frame as the only reference frame for lessening quality lossduring data transmission. Specifically, the invention includes using aframe coded prior to the last frame as the only reference frame for agiven frame in order to lessen the quality loss associated withtransmission over lines which produce lost or corrupt packets. This stepis limited to at least one of periodically (every F frames) andarbitrarily (based on some other criteria).

This aspect of the invention is particularly well-suited for a videoconference. Specifically, each party to a video conference compressesframes of video data and transmits the compressed video data to theother parties with packets that are marked such that the loss orcorruption of a packet is detectable. If any party detects that a packetis lost or corrupted, the detecting party signals the sending party tosend an update frame that has been encoded using a reference frame thathas already been successfully received and decoded by all of theremaining parties.

The invention may preferably use reference frames in the followingmanner. A fixed interval F of video frames may be selected by theencoder and transmitted to the decoder. Every F′th frame is encodedusing only the previous encoded F′th frame for reference. Every non F′thframe is encoded using the prior frame as reference. Each frame of videois transmitted to the decoder so that loss and corruption aredetectable. All of these steps preferably occur at the encoder. On thedecoder side, the coded video data is received from the encoder anddecoded by the decoder. If a packet is lost and the lost packet isassociated with a non F′th frame, the decoder waits for the next F′thframe to recover the lost packet.

As another alternative, the invention encodes a current frame at leastone of periodically and arbitrarily at a higher than ambient qualitydetermined by a metric of statistics taken from this and prior codedframes and stores the encoded current frame for usage by subsequentframes as a secondary reference frame.

Variations in these and other aspects will be described in additionaldetail hereafter.

DETAILED DESCRIPTION

Several different aspects of the invention will be describedhereinafter.

Dynamic Coefficient Reordering

In DCT (Discrete Cosine Transform) based video compression systems an 8by 8 block of pixel or prediction error signal data is transformed intoa set of 64 frequency coefficients (a DC value and 63 AC values), whichare then quantized and converted into a set of tokens.

Typically the higher frequency AC coefficients are smaller in magnitudeand hence less likely to be non zero following quantization.Consequently, prior to tokenization the coefficients are often arrangedinto ascending order starting with the lowest frequency coefficient (theDC value) and finishing with the highest frequency AC coefficient. Thisscan order, sometimes referred to as “zig-zag order”, tends to grouptogether the non-zero values at the start and the zero values into runsat the end and by so doing facilitates more efficient compression.

However, this fixed scan order is seldom optimal. For example, whenencoding interlaced video material, certain high frequency coefficientsare much more prominent. This fact is reflected in the prior art wherethere are examples of codecs (for example MPEG-2), that mandate analternative scan order for use when coding interlaced video.

One aspect of the invention is a method whereby a codec can optionallycustomize the scan order in which coefficients are encoded to moreoptimally reflect the characteristics of a particular data set.

According to this invention the codec maintains a record of thedistribution of zero vs. non-zero values for each of the DCTcoefficients, in one or more frames of video. This record is used tocreate a custom scan order where coefficients that are more likely to benon-zero appear earlier in the list.

The codec may optionally collate additional information such as theaverage magnitude of the non-zero values for each coefficient and usethis to further optimize the scan order.

The overhead of transmitting a new custom scan order, or updating apreviously transmitted scan order, may in some cases negate the benefitgained from improved coefficient coding efficiency. Hence, a costbenefit analysis may be necessary to determine if the update provides anet benefit.

The main factors affecting the outcome of this analysis are the cost ofupdate, the number of blocks (and hence coefficients) to be encoded andthe extent to which the new scan order deviates from either a standardscan order or a previously encoded scan order.

For an 8×8 element DCT, coding a “complete” custom scan order (i.e., anew position for every one of the 64 coefficients), would require 384bits (64 coefficients×6 bits each). This cost is likely to beprohibitive unless the number of blocks (and hence coefficients) to becoded is very large or the optimum scan order differs very significantlyfrom the default scan order (this being either a standard scan order orone previously encoded). The rationale behind this statement is that ifthe default scan order is similar to the custom scan order, then theaverage number of bits saved coding each block is likely to be small,hence a large number of blocks must be coded to justify the overhead ofupdating the scan order. Conversely if the default scan order isdissimilar to the custom scan order, then the average saving per blockis likely to be high.

A simple way to improve this situation would be to only code changes tothe scan order. For example, for each coefficient, code a bit toindicate whether it has changed its position in the scan order and thenif appropriate its new position. Though this will typically result in alower update cost, the worst case scenario here is where the new scanorder is different for all coefficients, in which case the cost ofupdate would be 448 bits (64×7).

An attractive aspect of such an approach is that the cost of update islowest where the custom and default scan order are most similar (andhence the likely cost saving per block is at its lowest), and highestwhen they are most dissimilar.

The situation can be improved still further by considering cost benefitat the level of individual coefficients or pairs of coefficients.Consider, for example, a case where two coefficients are adjacent to oneanother in the scan order and where the likelihood of a non-zero valueis almost identical for both. A small change in the number of non-zerovalues for one or other of the two coefficients could cause them to swapplaces in the custom scan order. To encode this change would meanupdating the scan position for both coefficients at a cost of 14 bits(assuming the update model above). However, the saving achieved might benegligible. This problem is particularly relevant in respect of the highorder AC coefficients. Here, the frequency of non-zero values istypically very low and even a tiny change could cause a coefficients'position in the scan order to change significantly.

While it is certainly feasible to base the calculation of a custom scanorder purely upon the distribution of zeros vs. non-zeros for eachcoefficient, there are other factors that are relevant. As mentionedpreviously, one of these is the average magnitude of the non-zerovalues. Another is the fact that in some cases a positive correlationmay exist between the values of one or more coefficients. For example,between a low order “pure horizontal” AC coefficient and higher order‘pure horizontal’ coefficients. In such cases, unless there is asubstantial difference in the prevalence of non-zero values, it may bepreferable to keep them in their original order (lowest frequency tohighest frequency).

The preferred implementation of this aspect of the invention goes someway to addressing such issues whilst further reducing the cost ofupdating the scan order. The procedure for creating a custom scan orderis broadly as follows:

(a) The DC coefficient is always coded first (position 0)

(b) Order the AC coefficients into descending order based upon theproportion of the values that are non-zero for each coefficient.

(c) Split the ordered list into 16 variable sized bands (see table 1)

(d) Within each band re-order into zig-zag scan order.

Note that the subdivision into 16 bands as shown in Table 1 is basedupon empirical observations with a range of different test clips and isnot necessarily optimal.

TABLE 1 Preferred scan order coefficient bands Band First coefficientLast coefficient 0 1 1 1 2 4 2 5 10 3 11 12 4 13 15 5 16 19 6 20 21 7 2226 8 27 28 9 29 34 10 35 36 11 37 42 12 43 48 13 49 53 14 54 57 15 58 63

Empirical experiments show that this banding strategy gives results thatare usually as good as and often better than those obtained using a scanorder based purely upon the proportion of the values that are non zero;even before the cost of update is taken into account.

The second advantage is that the cost of updating the scan order isgreatly reduced because it is only necessary to update a value when itmoves from one band to another. Further, only 4 bits are needed to codea change in band.

A final optimization used in the preferred implementation is based uponthe observation that some coefficients change bands much more frequentlythan others. For example, the high order AC coefficients tend to changebands less often than the low order coefficients.

If a particular coefficient is only updated 2% of the time, for example,then it is wasteful to use 1 bit to indicate whether or not it is to beupdated on a given frame. By using arithmetic coding techniques andassigning empirically determined update probabilities to eachcoefficient, it is possible to get the average update cost substantiallybelow 1 bit per coefficient.

The following “C” code segments give supporting detail of the preferredimplementation of this aspect of the invention.

// Work out a new “preferred” scan order using the zero/non-zerofrequency data // that has been collected. void CalculateScanOrder (CP_INSTANCE *cpi ) {   UINT32 i, j, k;   UINT32 Sum;   UINT32 tmp[2];  UINT32 NzValue [BLOCK_SIZE][2]; UINT32 GroupStartPoint, GroupEndPoint;  // For each coefficient, calculate the proportion of the values that11 were non-zero as a scaled number from 0-255.   for ( i=1;i<BLOCK_SIZE; i++ )   {   Sum = cpi->FrameNzCount[i][0J +cpi->FrameNzCount[i][1]; if( Sum )     NzValue [i][0] =(cpi->FrameNzCount[i][I]*255)/Sum; else     NzValue [i] [0] = 0;  NzValue [i][1] = i;   } // Sort into decending order for ( i=1;i<BLOCK SIZE−1; i++ ) {   for ( j =i+1; j>1; j−− )   {     if ( NzValue[j][0] > NzValue [j−l][0] ) {       // Swap them over       tmp[O] =NzValue [j− MO]; tmp[1] = NzValue [j−l][1];       NzValue [j−I][0]=NzValue [j][0]; NzValue [j−l][1] = NzValue [j][1];       NzValue [j][0]= tmp[O]; NzValue [j][1] = tmp[1];     }   } } //Split into bands andthen re-sort within each band // into ascending order based upon zig-zagscan position GroupEndPoint = 0; for ( k=0; k<SCAN_ORDER BANDS; k++ ) {  GroupStartPoint = GroupEndPoint + 1;   GroupEndPointEndpointLookup[k];   for ( i=GroupStartPoint; i<GroupEndPoint; i++ )   {    for ( j =i+1; j>GroupStartPoint; j−− )     {       if( NzValue[j][1] < NzValue [j−1][l] ) {         // Swap them over          tmp[O]= NzValue U−1][0];          tmp[1] =NzValue [j−l][1];         NzValue[j−I][0] = NzValue [j][0];         NzValue [1−1][1] = NzValue NzValue[j][0] = tmp[0];        }     }     // For each coef index mark its bandnumber     for ( i=GroupStartPoint; i<<GroupEndPoint; i++ )      {      // Note the new scan band number for each coef.       // NzValue[i][1] is the position of the coef in the traditional       // zig-zagscan order, i is the position in the new scan order and /I k is the bandnumber,       cpi->NewScanOrderBands[ NzValue [i][1J ] = k;     }   } }// This structure gives scan order update probabilities (scaled to therange of 1-255) // for each of the dct coefficients (in traditionalzig-zag order). The values are passed // to the function “nDecodeBoolO”and indicate the probability that the result will be 0 // (FALSE). //const UINT8 ScanBandUpdateProbs[BLOCK SIZE] _(—) {   255, 132, 132, 159,153, 151, 161, 170,   164, 162, 136, 110, 103, 114, 129, 118,   124,125, 132, 136, 114, 110, 142, 135,   134, 123, 143, 126, 153, 183, 166,161,   171, 180, 179, 164, 203, 218, 225, 217,   215, 206, 203, 2I7,229, 241, 248, 243,   253, 255, 253, 255, 255, 255, 255, 255,   255,255, 255, 255, 255, 255, 255, 255 }; // Reads updates to the scan orderif they are available for this frame. void UpdateScanOrder( PBINSTANCE*pbi ) {   // Is the scan order being updated this frame?   If(nDecodeBool( 128 ) )   {     // Read in the those scan bands that havebeen updated for (i = l; i < BLOCK SIZE; i++ )     for (i = l; i < BLOCKSIZE; i++ )       { U Has the band for this coefficient been updated?      if( nDecodeBool( ScanBandUpdateProbs[i] ) )       {        pbi->ScanBands[i] = VP6_bitread( SCAN_BAND UPDATE BITS );      }     //Build the new scan order from the scan bands data BuildScanOrder(pbi, pbi->ScanBands );   } } // Builds a custom scan order from a set ofscan band data, void BuildScanOrder( P8 _INSTANCE *pbi, UINT8 *ScanBands) {   UINT32 i, j;   UINT32 ScanOrderIndex =1;   // DC is fixedpbi->ModifedScanOrder[O] = 0;   // Create a scan order where within eachband the coefs are in ascending order   // (in terms of their original“zig-zag” scan order positions).   for ( i = 0; i < SCAN_ORDER BANDS;i++ ) {     for (j = 1; j < BLOCK SIZE; j++ ) {       if( ScanBands[j]== i ) {           pbi->ModifiedScanOrder[ScanOrderindex] = j;         ScanOrderindex++;      }     }   } }

Using Independent Bitstream Partitions to Facilitate Encoder and DecoderOptimization, and Using of Mixed Mode Entropy Coding

When optimizing a codec for a specific hardware device, it is importantto make sure that full use is made of any facilities that the device mayoffer for performing multiple tasks in parallel and to limit the extentto which individual parts of the decode process become bottlenecks.

The inventive bitstream, in common with most other video codecs, canbroadly speaking be described as comprising entropy coded tokens thatcan be divided into two main categories.

(a) Predictor tokens (hereinafter referred to as P tokens). For example,tokens describing the method or mode used to code a block or region ofan image and tokens describing motion between one frame and another.

(b) Prediction Error signal tokens (hereinafter referred to as Etokens). These are used to code any residual error that results from animperfect prediction.

Entropy coding is a process whereby the representation of a specific Por E token in the bitstream is optimized according to the frequency ofthat token in the bitstream or the likelihood that it will occur at aparticular position. For example, a token that occurs very frequentlywill be; represented using a smaller number of bits than a token thatoccurs infrequently.

Two of the most common entropy coding techniques are Huffman Coding andarithmetic coding. In Huffman coding each token is represented by avariable length pattern of bits (or a code). Arithmetic coding is a morecomputationally complex technique but it removes the restriction ofusing a whole number of bits for each token. Using an arithmetic coderit is perfectly possible, for example, to code a very common token at anaverage cost of ½ of a bit.

Many multimedia devices have a co-processor unit that is well suited tothe task of entropy coding and a more versatile main processor.Consequently, for the purpose of parallelization, the process ofencoding or decoding a bitstream is often divided into entropy relatedtasks and non entropy related tasks.

However, for a given video clip, as the data rate increases the numberof tokens to encode/decode rises sharply and entropy coding may become abottleneck.

With a conventional bitstream it is very difficult to re-distribute thecomputational load of entropy coding to eliminate this bottleneck. Inparticular, on the decode side, the tokens must normally be decoded oneat a time and in the order in which they were encoded. It is alsoextremely difficult to mix methods or entropy encoding (for exampleHuffman and arithmetic coding) other than at the frame level.

This aspect of the invention is a method designed to make it easier toredistribute the computational load of entropy coding, and to facilitatethe use of mixed mode entropy coding through structural changes to thebitstream.

According to this method each frame in the bitstream is divided into twoor more wholly independent data partitions. The partitions may bewritten to or read from in parallel and are not constrained to use thesame entropy encoding mechanism. This makes it easier to optimize theprocess of encoding or decoding to avoid entropy related bottlenecks athigh bit-rates.

The ability to use both Huffman and arithmetic techniques, or a mixtureof the two, within a single frame, gives the encoder the ability tobetter optimize the tradeoff between the amount of compression achievedand computational complexity. For example, an encoder could beconfigured to use the less complex Huffman method in one or more of itspartitions if the projected size of a frame exceeded a given threshold.

The specific implementation of this aspect of the invention supports theuse of either one or two main data partitions. In addition there is asmall header partition.

When using a single data partition the codec behaves in a conventionalmanner. Both P and E tokens are coded using a proprietary arithmeticcoder in a single data partition. This method has slightly loweroverheads (a few bits per frame) but is less flexible. For example:

Partition 1 (block 1) P, P, E, E, E (block 2) P, E, E, (block 3) P, P,E, E, E,

In the second case, however, the P and E tokens are written to separatepartitions. For example:

Partition 1 Partition 2 (block 1) PP EEE (block 2) P EE (block 3) P EEEE

The size of the first partition does not tend to vary as much with datarate, and is comparatively small, so this partition is always codedusing the arithmetic coder. The second partition may be coded usingeither the arithmetic coder or the Huffman coder.

The choice of Huffman or arithmetic coding for the second partition canbe signaled at the frame level. In the preferred implementation thechoice depends upon the performance of the target decoder platform andthe projected size in bits of the frame. Specifically, if the frame sizerises above a threshold number, where there is a danger that the decoderwill have problems decoding the frame in real time, then the Huffmanmethod is used.

Encoder performance can also be an issue where real time encoding is arequirement, but with the possible exception of key frames (which tendto be larger and have no dependencies on other frames), the cost of theentropy coding is usually a smaller fraction of the total computationalcost in the encoder.

The following “C” code segments give supporting detail of the preferredimplementation of this aspect of the invention.

//This function packs the encoded video data for a frame using eitherone arithmetically // coded data partition, two arithmetically codeddata partitions, or one arithmetically // coded data partition and oneHuffman data partition. // //The argument “cpi” is a pointer to the mainencoder instance data structure. void PackCodedVideo ( CP_1NSTANCE *cpi) {   UINT32 PartitionTwoOffset;   BOOL CODER *bc &cpi->bc;      //Arithmetic coder instance data structure   B O O L CODER *bc2&cpi->bc2;   // 2nd Arithmetic coder instance structure   P8 ...INSTANCE*pbi = &cpi->pb;     // Decoder instance data structure   // Initializethe raw buffer i/o used for the header partition.  InitAddRawBitsToBuffer ( &cpi->RawBuffer, pbi->DataOutputPtr );   //Start the arithmetic and or Huffman coders   // If we are using two datapartitions...   if( pbi->MultiStream I I (pbi->VpProfile = SIMPLEPROFILE) )   {   //Start the first arithmetic coder: Allow for the rawheader bytes.   VP6_StartEncode ( bc, (pbi->DataoutputPtr + ((KeyFrame)? 4 : 3)) );   // Create either a second arithmetic or Huffman partition  // This is initially written to a holding buffer “cpi->OutputBuffer2”  if ( pbi->UseHuffman )        InitAddRawBitsToBuffer (&pbi->HufBuffer, cpi->OutputBuffer2 );      else        VP6_StartEncode( bc2, cpi->OutputBuffer2 );   // We are only using a single datapartition coded using the arithmetic coder. else   {     //Start thearithmetic coder: Allow for the raw header bytes.     VP6_StartEncode(bc, (pbi->DataOutputInPtr + ((KeyFrame) ? 2 : 1)) );   // Write out theframe header information including size.   WriteFrameHeader (... );  if( pbi->UseHuffman )     PackHufmmanCoeffs (... );   else    PackArithmeticCoeffs (... );   // Stop the arithmetic coder instanceused for the first data partition   VP6_StopEncode ( be );   //Work outthe offsets to the data partitions and write them into   // the spacereserved for this information in the raw header partition.   //   // Ifwe are using two data partitions....   if( pbi->MultiStream I I(pbi->VpProfile = SIMPLE PROFILE) )   {     // Offset to first datapartition from start of buffer     PartitionTwoOffset = 4 + be->pos;    //Write offset to second data partition partition.    AddRawBitsToBuffer ( &cpi->RawBuffer, PartitionTwoOffset ,16 );    // If Huffman was used for the second data partition ...     if(pbi->UseHuffman )     {       // Flush the buffer for the Huffman codedoutput partition       EndAddRawBitsToBuffer ( &pbi->HuffBuffer );      // Copy the Huffman coded data from the holding buffer into theoutput buffer.       memcpy ( &cpi->RawBuffer.Buffer[ PartitionTwoOffset], pbi->HuffBuffer.Buffer, pbi->HuffBuffer.pos );       // Stop thearithmetic coder instance used by the second data partition.      VP6_StopEncode ( bc2 );       //Copy over the contents of theholding buffer used by       //the second partition into the outputbuffer.       >DataOutputlnPtr[ PartitionTwoOffset ],          bc2.buffer, bc2.pos );        }     )     // Stop and flushthe raw bits encoder used for the header     EndAddRawBitsToBuffer (&cpi->RawBuffer ); } //This function is called to select the codingstrategy when using two data partitions. void SelectMultiStreamMethod (CP _INSTANCE *pbi ) {   // Calculate an estimated cost (Shannon entropy)for the frame using   // the information gathered re, the distributionof tokens in the frame.   // Add in the previously calculated costestimate for coding any mode and 11 motion vector information.  EstimatedFrameCost = VP6_ShannonCost( cpi ) + ModeMvCost;   // Decidewhether to drop using Huffman coding for the second data partition. )  if ( EstimatedFrameCost > HuffmanCodingThreshold ) pbi->UseHuffman =TRUE;   else    pbi->UseHuffman = FALSE; }

Using a Plurality of Filters to Enhance Fractional Pixel MotionPrediction in Video Codecs

For most modem video codecs motion prediction is an important part ofthe compression process. Motion prediction is a process whereby themotion of objects or regions of the image is modeled over one or moreframes and one or more motion vectors is transmitted in the bitstream torepresent this motion. In most cases it is not possible to perfectlymodel the motion within an image, so it is necessary to code a residualerror signal in addition to the motion information,

In essence, each motion vector points to a region in a previouslyencoded frame that is similar to the region in the current frame that isto be encoded. The residual error signal is obtained by subtracting thepredicted value of each pixel from the actual value in the currentframe.

Many modem video codecs extend the process by providing support forprediction of motion to sub pixel accuracy. For example half pixel orquarter pixel motion estimation. To create fractional pixel data pointsit is necessary to use some form of interpolation function or filterapplied to real (i.e. full pixel aligned) data points.

Early codecs generally used simple bilinear interpolation

A x B y z C D

In this example, A, B, C, and D are full pixel aligned data points andx, y, and z are half pixel aligned points. Point x is half pixel alignedin the X direction and can be calculated using the formula: x=(A+B)/2.Point y is half pixel aligned in the Y direction and can be calculatedusing the formula: y=(A+C)/2. Point z is half pixel aligned in both Xand Y can be calculated using the formula: z=(A+B+C+D)/2.

Later codecs have tended to move towards the use of more complexinterpolation filters, such as bicubic filters, that are less inclinedto blur the image. In the following example x is a half pixel point thatlies half way between two full pixel aligned pointes B and C. Using aninteger approximation to a bicubic filter it can be calculated using theformula: x=(−A+9B+9C−D)/16.

A B×C D

Though filters such as the one illustrated above tend to produce sharperlooking results, their repeated application over several frames can insome situations result in unpleasant artifacts such as false textures orfalse contouring.

This aspect of the invention is a method where by a codec can use amixture of filtering techniques to create more optimal fractional pixelpredictors and select between these methods at the clip level, the framelevel, the block level or even at the level of individual pixels.

In the preferred implementation a selection can be made on a per framebasis as to whether to use bilinear filtering only, bicubic filteringonly or to allow a choice to be made at the block level.

Selection at the block or region level could be achieved by means ofexplicit signalling bits within the bitstream, but in the preferredimplementation selection is made using contextual information alreadyavailable in the bitstream and by means of a complexity metric appliedto the full pixel aligned data values that are going to be filtered.

In situations where the quality of the motion predictor is poor (forexample if it was not possible to find a good prediction for a block inthe previous frame reconstruction), bilinear filtering is often the bestoption. Specifically where the prediction is poor the sharpeningcharacteristics of the bicubic filter may lead to an increase in thehigh frequency content of the residual error signal and make it moredifficult to encode.

In the absence of explicit signalling bits in the bitstream variouscontextually available values that can be shown to be correlated to agreater or lesser extent with poor prediction quality. One of thesimplest of these is motion vector length. Specifically the quality ofthe prediction tends to degrade with increasing motion vector length.The smoothness of the motion field in is another possible indicator(i.e. how similar are the motion vectors of neighbouring blocks).

Bilinear filtering also tends to be the better option in situationswhere the choice of vector is unreliable (for example, where there isnot very much detail in the image and there are many candidate vectorswith similar error scores). In particular, repeated application of abicubic filter over many frames, to a region that is relatively flat andfeatureless, may give rise to unwanted artifacts.

In the preferred implementation two factors are taken into account whenchoosing the filtering method. The first is the length of the motionvector. The second is a complexity metric C calculated by analyzing theset of full pixel aligned data points that are going to be filtered.

Bicubic filtering is used only if both the following test conditions aresatisfied:

1. The motion vector is shorter than a threshold value L in both X andY.

2. The complexity C is greater than a threshold value T.

In the preferred implementation C is a variance of a set of n datapoints xi calculated according to the formula:

C=(nExi ²⁻(Exi)²)/n ²  (4)

In the preferred implementation the complexity threshold T and themotion vector length threshold L may be set by the encoder on a once perframe basis.

The following “C” code segments give supporting detail the preferredimplementation of this aspect of the invention.

PredictBlockFunction(... ) { if ( pbi->PredictionFilterMode =AUTO_SBLECT PM) {    // Use bilinear if vectors are above a thresholdlength in X or Y    if( (( abs(pbi->mbi.Mv[bp].x ) > BicMvSizeLimit) II((    abs(pbi->mbi.Mv[bp].y ) > BicMvSizeLimit) )   {   FilterBlockBilinear(.., );   } else   {    //Calculate a complexitymetric (variance).    //Note: for performance reasons the variancefunction only    // examines 16 data points (every other point in X andY    // for an 8×8 block).    Var = Varl6Point( DataPtr, Stride );   //If the complexity is above the given threshold use bicubic else   use bilinear    if( Var >= pbi->PredictionFilterVarThresh )   FilterBlockBilcubic(... );    else FilterBlockBilinear( );    } }}UINT32 Varl6Point ( UINT8 *DataPtr,1NT32 Stride ) {      UINT32 i, j;     UINT32 XSum=O, XXSum=O;      UINT8 *Dif f tr = DataPtr;      //Useevery other point in X and Y      for ( i = 0; i < BLOCK HEIGHT WIDTH; I+= 2 )        for (j = 0; j < BLOCK_HEIGHT WIDTH; j += 2 )        {         XSum += DiffPtr[j];          XXSum += DiffPtr[j] * DiffPtr[j];       }        //Step to next row of block. DiffPtr +=       (SourceStride << 1)    //Compute population variance as mis-matchmetric,    return (( (XXSum* 16) − (XSum*XSum) ) 1256 ); }

Enhanced Motion Vector Coding

By convention, most modern video codecs code the (x,y) components of amotion vector, using a differential coding scheme. That is, each vectoris coded relative to the previous vector. For example, consider twovectors (7,3) and (8,4). In this case the second vector would be encodedas (1,1), that is (7+1, 3+1).

This scheme works well if most blocks or regions for which a motionvector is coded exhibit motion that is similar to that of theirneighbours. This can often be shown to be the case, for example whenpanning. However, it works less well if the motion field is irregular orwhere there are frequent transitions between background and foregroundregions which have different motion characteristics.

This aspect of the invention is an alternative strategy for encodingmotion vectors which retains the advantages of differential codingwhilst being more tolerant of irregular fields and background foregroundtransitions.

According to this invention, the codec maintains two or more referencevectors relative to which motion vectors may be encoded. The codec couldswitch between these reference vectors via explicit signalling bitswithin the bitstream, but in the preferred implementation the decisionis based upon the coding methods and motion vectors used by the blocks'immediate neighbours.

In the preferred implementation, a block may be coded as and intra block(with no dependency on any previous frames), or an inter block which isdependent upon either the previous frame reconstruction, or analternative reference frame that is updated only periodically.

When coding with respect to the previous frame reconstruction or thealternative reference frame, the invention supports the following codingmode choices.

(a) Code with no motion vector (that is to say an implicit (0,0) vector)

(b) Code using the same vector as the ‘nearest’ neighbouring.

(c) Code using the same vector as the ‘next nearest’ neighbour.

(d) Code using a new motion vector.

When defining the nearest or next nearest neighbour, only blocks thatare coded with respect to the same reference frame as the current blockand those that are coded with a non-zero motion vector are considered.All other blocks are ignored.

When defining the next nearest neighbour, blocks that are coded with thesame vector as the nearest neighbour are also ignored.

When coding a new motion vector the codec may use either (0,0) or thenearest vector as the reference vector. In the preferred implementationthe nearest vector is used if the block from which it is derived iseither the block immediately to the left or immediately above thecurrent block (assuming that blocks are being coded from left to rightand from top to bottom). In all other cases new vectors are coded withrespect to (0,0).

Several extensions to the basic method are possible. If the nearest andnext nearest neighbours are the blocks immediately to the left andimmediately above the current block respectively, then some sort ofcompound vector derived from the two could be used as a reference forcoding the new vector. Alternatively ‘nearest’ could be used to predictthe x component and ‘next nearest’ the y component.

Another possible extension, still assuming that nearest and next nearestare the blocks immediately to the left and above the current block,would be to take special account of the case where the nearest and nextnearest vectors are not similar, and in such a case revert to 0 as thereference value for x, y or both x and y.

This method retains the benefits of simple differential coding in caseswhere there is a regular or slowly changing motion field. However, theuse of special ‘no vector’, ‘nearest’ and ‘next nearest’ modes makes formore efficient coding of transitions between foreground and backgroundand the ability to switch automatically between multiple coding originsmakes the method more tolerant of irregular motion fields.

The following “C” code segments give supporting detail of the preferredimplementation of this aspect of the invention.

// This function determines whether or not there is a qualifying nearestand next // nearest neighbour for the current block, what the motionvectors are for those // and how close the nearest neighbour is. // voidVP6_FindNearestandNextNearest( PB_INSTANCE *pbi,                  UINT32MBrow,                  UINT32 MBcoI,                  UINT8ReferenceFrame                  INT32 * Type ) {   int i;   UINT32OffsetMB;   UINT32 BaseMB = MBOffset(MBrow,MBcol);   MOTION VECTORThisMv;   //Set default outcome    *Type = NONEAREST_MACROBLOCK;    //Search for a qualifying “nearest” block    for ( i=0; i<12 ; i++ )    {    OffsetMB = pbi->mvNearOffset[i] + BaseMB;     // Was the block codedwith respect to the same reference frame?     if (VP6_Mode2Frame[pbi->predictionMode[OffsetMB]] 1= ReferenceFrame)continue;     // What if any motion vector did it use     ThisMv.x =pbi->MBMotionVector[OffsetMB].x; ThisMv.y =pbi->MBMotionVector[OffsetMB].y;     //If it was non-zero then we have aqualifying neighbour     if ( ThisMv.x 11 ThisMv.y )       Nearest.x =ThisMv.x;       Nearest.y = ThisMv.y;       *Type = NONEAR_MACROBLOCK;      break; }     pbi->mbi.NearestMvIndex = i;     // Search for aqualifying “next nearest” block for ( i=i+1; i<12; i++ )     {    OffsetMB = pbi->mvNearOffset[i] + BaseMB;     //Was the block codedwith respect to the same reference frame?     if (VP6_Mode2Frame[pbi->predictionMode[OffsetMB]] != ReferenceFrame)      continue;     // What if any motion vector did it use     ThisMv.x= pbi->MBMotionVector[OffsetMB].x;     ThisMv.y =pbi->MBMotionVector[OffsetMB].y;     // If this vector is the same asthe “nearest” vector then ignore it.     if( (ThisMv.x == Nearest.x) &&(ThisMv.y Nearest,y) )       continue;     // If it was non-zero then wehave a qualifying neighbour     if( ThisMv.x 1I ThisMv.y )     {      NextNearest.x ThisMv.x;       NextNearest.y ThisMv.y;       *Type= MACROBLOCK;       break;     }

Using An Alternate Reference Frame in Error Recover

When transmitting compressed video data over an unreliable data link itis important that a mechanism exists for recovering when data is lost orcorrupted, as video codecs are often extremely sensitive to errors inthe bitstream.

Various techniques and protocols exist for the reliable transmission ofdata of such links and these typically rely upon detection of the errorsand either re-transmission or the use of additional data bits that allowcertain types of error to be corrected.

In many situations the existing techniques are adequate but in the caseof video conferencing over restricted bandwidth links neither of theabove mentioned approaches is ideal. Re-transmission of lost datapackets may not be practical because it is likely to cause an increasedend to end lag, whilst the use of error correction bits or packets maynot be acceptable in situations where bandwidth is already severelyrestricted.

An alternative approach is simply to detect the error at the decoder andreport it to the encoder. The encoder can then transmit a recovery frameto the decoder. Note that this approach may not be appropriate if theerror rate on the link is very high. For example, more than one error inevery 10-20 frames.

The simplest form of recovery frame is a key frame (or intra onlyframe). This is a frame that does not have any dependencies on previousframes or the data therein. The problem with key frames is that they areusually relatively large.

Disclosed herein is a mechanism whereby a codec maintains a one or moreadditional references frames (other than the reconstruction of thepreviously coded frame) that can be used as a starting point for moreefficiently coding of recovery frames.

In the preferred implementation of the invention the codec maintains asecond reference frame which is updated whenever there is a key frameand optionally at other times, via a flag bit in the frame header. Forexample the encoder could choose to update the second reference frameonce every ‘X’ seconds or whenever an error recovery frame is encoded.

Provided that the content of the second reference frame is at least insome respects similar to the content of the current frame, differentialcoding with respect to the second reference frame is likely to be muchcheaper than coding a key frame.

There are several ways in which one or more alternate reference framesmay be used to enhance compression quality or efficiency. One obvioususage that is covered in the prior art is in video sequences thatoscillate back and forth between two or more different scenes. Forexample, consider an interview where the video switches back and forthbetween interviewer and interviewee. By storing separate referenceframes as a baseline for each camera angle the cost of switching backand forth between these can be greatly reduced, particularly when thescenes are substantially different.

Whilst the invention has the option of using an alternate referenceframe in this way, the subject of this invention is the use of aperiodically updated alternate reference frame to enhance the quality ofcompressed video is situations where there is a slow progressive changein the video. Good examples of this are slow pans, zooms, or trackingshots.

According this aspect of the invention, during slow pans or other suchslow progressive changes the encoder periodically inserts frames whichare encoded at a significantly higher quality than the surroundingframes and which cause the second or alternative reference frame to beupdated.

The purpose of these higher quality “second reference update” frames isto re-instate detail that has incrementally been lost since the last keyframe, or the last second reference update, and to provide a betterbasis for inter frame prediction in subsequent frames. This strategy ofperiodically raising the quality (and hence the data rate) and at thesame time updating the second reference frame can be shown to provide amuch better cost/quality trade off in some situations than simply codingall the frames at a similar quality.

Central to an effective implementation is the method for determining anappropriate interval for the second reference updates and the amount bywhich the quality or data rate should be boosted.

In the preferred implementation of this aspect of the invention, severalfactors are taken into account. These include:

(a) The average amplitude of motion vectors in the preceding few framesas an indicator of the speed of motion.

(b) The extent to which the motion field is correlated. For example arethe motion vectors all fairly similar.

(c) The extent to which the second reference frame has been used as apredictor in preference to the previous frame reconstruction in theprevious few frames.

(d) The ambient quality or quantizer setting.

In cases where the average amplitude of the motion vectors used is high(indicating faster motion), the interval between second referenceupdates and the quality boost are both decreased. Conversely, where themotion is slow a larger quality boost and longer interval are used.

In cases where the motion field is highly correlated, that is to saythat there are a lot of similar motion vectors, the quality boost forsecond reference frame updates is increased. Conversely, when the motionfield is poorly correlated the extent of the boost is decreased.

In cases where the second reference frame is frequently being used as apredictor in preference to the previous frame reconstruction, thequality boost is increased. Conversely in cases where the secondreference frame is not used frequently it is decreased.

The extent of the quality boost also depends to some extent on theambient quality with a larger boost being used when the ambient qualityis low and a smaller boost when the ambient quality is high.

The following pseudo code gives more detail of the preferredimplementation of this aspect of the invention.

For each frame   Calculate of the average amplitude of the X and Ymotion vector components (AvX and AvY) specified in pixel units.  MotionSpeed = the larger of AvX and AvY   Calculate a variance numberfor the X and Y motion vector components (VarianceX and VarianceY).  MaxVariance = the larger of VarianceX and VarianceY   MotionComplexity= MotionSpeed + (VarianceX 14) + (VarianceY l 4)   If a second referenceframe update is due this frame     Calculate a data rate % boost number(Boost) based upon the predicted quality index (actually a quantizersetting) for the frame, This can range between +0% at highest quality to+1250% when the quality level is very low.   Multiply Boost by aMotionSpeed correction factor where the factor can vary between 1 forvery small values of   MotionSpeed to 0 for large values of MotionSpeed.  Apply a further correction factor to Boost based upon the extent towhich the second reference frame has been used in the previous fewframes. This can vary from 1/16 in cases where the second referenceframe was not used at all in the previous few frames up to 1 in caseswhere it was used for 15% or more of the coded blocks.   A series oftests are then applied to determine whether or not to go ahead andupdate the second reference frame with the calculated % boost.

The principal tests are:

(Boost>MinBoostTreshold) and

(MotionSpeed<MaxMotionSpeedThreshold) and

(MaxVariance<MaxVarianceThreshold) where MinBoostTreshold,MaxMotionSpeedThreshold and MaxVarianceThreshold are configurableparameters.

The invention has a number of special “motion re-use” modes that allowthe motion vector for a block to be coded more cheaply if it is the sameas the motion vector used by one of its near neighbours. Further testsare applied to discount cases where the usage of these modes falls belowa threshold level.

If the decision is made to apply the boost and update the secondreference frame then set the frame data rate target to the baselinevalue+Boost % and calculate and the interval until the next update basedupon MotionSpeed.

If the decision is made not to apply the boost and not to update thesecond reference frame, then update the frame as normal with a 0% datarate boost.

Else if a second reference frame update is not due, calculate a reducedframe data rate target (negative boost) that takes into account thelevel of boost applied when the second reference frame was last updatedand the current update interval.

Using a Reconstruction Error Metric to Select Between AlternativeMethods for Creating Fractional Pixel Predictions

Many modern video codecs support prediction of motion to sub pixelaccuracy. For example half pixel or quarter pixel motion estimation. Tocreate fractional pixel data points it is necessary to use some form ofinterpolation function or filter applied to real (i.e., full pixelaligned) data points.

Early codecs generally used simple bilinear interpolation.

A x y z C

In this example A, B, C, and D are full pixel aligned data points andx,y and z are half pixel aligned points.

Point x is half pixel aligned in the X direction and would be calculatedusing the formula (A+B/2).

Point y is half pixel aligned in the Y direction and would be calculatedusing the formula (A+C/2).

Point z is half pixel aligned in both X and Y would be calculated usingthe formula (A+B+C+D /2) .

Later codecs have tended to move towards the use of more complexinterpolation filters such as bicubic filters, that are less inclined toblur the image. In the following example ‘x’ is a half pixel point thatlies half way between two full pixel aligned pointes B and C. It can becalculated using the formula (−A+9B+9C−D)/16.

A B×C D

Though filters such as the one illustrated above tend to produce sharperresults, repeated application over several frames can sometimes resultin unpleasant artifacts such as exaggeration of textures or falsecontouring.

This aspect of the invention is a method where by a codec can use amixture of bilinear and bicubic filtering to calculate more optimalfractional pixel predictors and select between these methods either at aframe level or at the level of the individual blocks or regions to whichmotion vectors are applied.

Selection at the block or region level could be achieved by means ofsignalling bits within the bitstream, but in the preferredimplementation selection is made by means of a complexity metric appliedto the set of pixels in the previous reconstructed image that are goingto be filtered.

According to this method, blocks or regions with a complexity scoreabove a threshold value “T” are filtered using the bicubic method whilstthose with a lower complexity score are filtered using the bilinearmethod.

In the preferred implementation the complexity metric is the variance ofthe set of “n” full pixel aligned data points to be filtered, wherevariance is defined as:

(nEx ²−(Ex)²)/n ².  (5)

In the preferred implementation the threshold value T′ may be updated ona once per frame basis.

1. A method of compressing video data having at least one frame havingat least one block having an array of pixels, comprising: transformingthe pixels of the at least one block into coefficients; creating adefault transmission order of the coefficients; creating an optimaltransmission order of the coefficients; comparing a coefficient positionof at least one of the coefficients in the optimal transmission orderwith a coefficient position of the at least one of the coefficients inthe default transmission order; determining an update value based on thecomparison, the update value indicative of whether the coefficientposition of the at least one of the coefficients in the optimaltransmission order is the same as the coefficient position of the atleast one of the coefficients in the default transmission order; andselectively encoding position information of the at least one of thecoefficients in the optimal transmission order based on the updatevalue.
 2. The method of claim 1, wherein the position information is atleast one of the coefficient position or band information, the bandinformation indicating a position of a group of coefficients.
 3. Themethod of claim 2, further comprising: transmitting, the coefficientsand the optimal transmission order of the coefficients.
 4. The method ofclaim 3, further comprising: limiting the transmission of the optimaltransmission order to changes in coefficient order from a current frameto a next frame.
 5. The method of claim 2, further comprising:consolidating the optimal transmission order of the coefficients intobands of coefficients, each band having a plurality of coefficientsorganized according to the default transmission order; and selectivelyencoding only the band information and the coefficients.
 6. The methodof claim 5, wherein selectively encoding only the band information andthe coefficients comprises only transmitting the band information when acoefficient changes bands from a current frame to a next frame.
 7. Themethod of claim 5, wherein selectively encoding only the bandinformation and the coefficients comprises always transmitting all theband information.
 8. The method of claim 2, further comprising:determining if a given frame is a key frame; if it is determined thatthe given frame is a key frame, transmitting the entire optimaltransmission order of the coefficients for the given frame; and if it isdetermined that the given frame is not a key frame, transmitting onlychanges in coefficient order of the coefficients from a previous frameto the given frame.
 9. The method of claim 1, wherein the optimaltransmission order of the coefficients is created for each frame of thevideo data.
 10. The method of claim 1, wherein transforming the pixelsof the at least one block into coefficients comprises: transforming thepixels of the at least one block into discrete cosine transformcoefficients.
 11. The method of claim 1, wherein each block has the samenumber of coefficients and coefficient positions.
 12. The method ofclaim 1, wherein each corresponding respective coefficient positionconveys the same information from block to block.
 13. An apparatus forcompressing video data having at least one frame having at least oneblock having an array of pixels, comprising: a memory; and a processorconfigured to execute instructions stored in the memory to: transformthe pixels of the at least one block into coefficients; create a defaulttransmission order of the coefficients; create an optimal transmissionorder of the coefficients; compare a coefficient position of at leastone of the coefficients in the optimal transmission order with acoefficient position of the at least one of the coefficients in thedefault transmission order; determine an update value based on thecomparison, the update value indicative of whether the coefficientposition of the at least one of the coefficients in the optimaltransmission order is the same as the coefficient position of the atleast one of the coefficients in the default transmission order; andselectively encode position information of the at least one of thecoefficients in the optimal transmission order based on the updatevalue.
 14. The apparatus of claim 13, wherein the position informationis at least one of the coefficient position or band information, theband information indicating a position of a group of coefficients. 15.The apparatus of claim 14, wherein the instructions further comprisesinstructions to: consolidate the optimal transmission order of thecoefficients into bands of coefficients, each band having a plurality ofcoefficients organized according to the default transmission order. 16.The apparatus of claim 15, wherein the instructions further compriseinstructions to: selectively encode only the band information and thecoefficients.
 17. The apparatus of claim 16, wherein the instructions toselectively encode only the band information and the coefficientscomprise instructions to: only transmit the band information when acoefficient changes bands from a current frame to a next frame.
 18. Theapparatus of claim 13, wherein the instructions further compriseinstructions to: determine if a given frame is a key frame; if it isdetermined that the given frame is a key frame, transmit the entireoptimal transmission order of the coefficients for the given frame; andif it is determined that the given frame is not a key frame, transmitonly changes in coefficient order of the coefficients from a previousframe to the given frame.
 19. An apparatus for encoding at least onevideo frame having a plurality of blocks including a current block,comprising: means for transforming the pixels of the at least one blockinto coefficients; means for creating a default transmission order ofthe coefficients; means for creating an optimal transmission order ofthe coefficients; means for comparing a coefficient position of at leastone of the coefficients in the optimal transmission order with acoefficient position of the at least one of the coefficients in thedefault transmission order; means for determining an update value basedon the comparison, the update value indicative of whether thecoefficient position of the at least one of the coefficients in theoptimal transmission order is the same as the coefficient position ofthe at least one of the coefficients in the default transmission order;and means for selectively encoding position information of the at leastone of the coefficients in the optimal transmission order based on theupdate value.
 20. The apparatus of claim 19, further comprising: meansfor determining if a given frame is a key frame; if it is determinedthat the given frame is a key frame, transmitting the entire optimaltransmission order of the coefficients for the given frame; and if it isdetermined that the given frame is not a key frame, transmitting onlychanges in coefficient order of the coefficients from a previous frameto the given frame.